"""### 第 4 课：Lambda 在函数式编程中的应用
一、返回lambda函数
二、回调函数
三、 简单组合函数
"""

''' 一、返回lambda函数'''

def make_increment(n):
    #返回的是一个lambda函数，这个lambda函数接受一个参数x，返回x+n
    return lambda x: x + n

#调用make_increment函数，返回一个lambda函数
func = make_increment(10)
print("func ,type:", func, type(func))
#调用lambda函数，传入参数10，返回10+10=20
print("func(5) =", func(5))

''' 二、回调函数'''
#回调函数：将一个函数作为参数传递给另一个函数，这个函数就被称为回调函数
def apply_func(x,y,func):
    #调用func函数，传入参数x，y返回func(x,y)
    return func(x,y)
#调用apply_func函数，传入参数10，20，返回10+20=30
result = apply_func(10,20,lambda x,y : x+y)
print("result =", result)
''' 三、 简单组合函数'''
#简单组合函数：将多个函数组合成一个新的函数,f(g(x))
def compose(f,g):
    #返回一个新的函数，这个函数接受一个参数x，返回f(g(x))
    return lambda x : f(g(x))  # 首先计算g(x)，然后计算f(g(x))

#调用compose函数，传入参数10，返回f(g(x))
f = lambda x : x + 2
#mul_tree =
g = lambda x : x * 3
func = compose(f,g)
result = func(10)
print(" f(g(10)) =", result)

